package main

import (
	"errors"
	"fmt"
	"os"
	"reflect"
)

func division(a, b float64) (res float64, err error) {
	fmt.Println("需要计算的数字是：", a, b)
	if b == 0 {
		err = errors.New("除数不能为0")
		return
	}
	res = a / b
	fmt.Println("计算结果：", res)
	return
}

func main() {
	// go 错误定义为error类型，可以使用errors包来创建错误
	// 像使用其他类型一样，去处理错误。
	// go 打开一个本地文件
	// 1. 打开文件   文件不存在  没有权限
	// 2. 写入内容
	f, err := os.ReadFile("test.txt")
	if err != nil {
		// 此时ReadFile报错
		fmt.Println("error:", err.Error())
	} else {
		fmt.Println(string(f))
	}

	//自定义err
	err1 := errors.New("这是自定义的错误信息")
	fmt.Println(err1)
	err2 := fmt.Errorf("这是自定义的错误信息：%s", "哈哈哈") //使用fmt.Errorf创建错误信息，并传入参数
	fmt.Println(err2)
	// var err error = errors.New("自定义错误") // 这样也行

	res, err3 := division(1, 0)
	if err3 != nil {
		fmt.Println("error:", err3.Error())
		fmt.Println(reflect.TypeOf(err3))
		fmt.Println(reflect.TypeOf(err3.Error()))

	} else {
		fmt.Println("res:", res)
	}
}
